#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/device.h>

#include "vbus.h"

MODULE_AUTHOR("Arkins");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Virtual Driver");

#define VDEVICE_NAME "vdevice"

static struct module *vbus_mod = NULL;

static struct device vdevice = {
    .init_name	= VDEVICE_NAME,
};

static int __init vdevice_init(void)
{
    int ret;
    printk(KERN_INFO "vdevice init\n");
    vbus_mod = find_module("v_bus");
    if (vbus_mod == NULL) {
        printk("vdevice_init vbus_mod == NULL\n");
        return 1;
    }
    if (!try_module_get(vbus_mod)) {
        printk("vdevice_init try_module_get error\n");
        return 1;
    }
    ret = vbus_register_device(&vdevice);
    if (ret) {
        printk("vdevice_init vbus_register_device ret=%d\n", ret);
        module_put(vbus_mod);
        return 1;
    }
    return 0;
}

static void __exit vdevice_exit(void)
{
    printk(KERN_INFO "vdevice exit\n");
    vbus_unregister_device(&vdevice);
    module_put(vbus_mod);
    vbus_mod = NULL;
}

module_init(vdevice_init)
module_exit(vdevice_exit)
